package com.rbac.admin.mapper.system;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.rbac.admin.entity.system.SystemDept;
import com.rbac.admin.vo.system.DeptVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 部门Mapper接口
 *
 * @author rbac-admin
 * @since 2024-07-18
 */
@Mapper
public interface DeptMapper extends BaseMapper<SystemDept> {

    /**
     * 查询部门列表
     *
     * @param dept 部门查询条件
     * @return 部门列表
     */
    List<DeptVO> selectDeptList(SystemDept dept);
    
    /**
     * 查询部门树
     *
     * @param dept 部门查询条件
     * @return 部门树列表
     */
    List<DeptVO> selectDeptTree(SystemDept dept);
    
    /**
     * 根据ID查询部门
     *
     * @param deptId 部门ID
     * @return 部门信息
     */
    DeptVO selectDeptById(@Param("deptId") Integer deptId);
    
    /**
     * 检查部门名称是否存在
     *
     * @param deptName 部门名称
     * @param excludeDeptId 排除的部门ID
     * @return 存在数量
     */
    Integer checkDeptNameExists(@Param("deptName") String deptName, @Param("excludeDeptId") Integer excludeDeptId);
    
    /**
     * 检查部门编码是否存在
     *
     * @param deptCode 部门编码
     * @param excludeDeptId 排除的部门ID
     * @return 存在数量
     */
    Integer checkDeptCodeExists(@Param("deptCode") String deptCode, @Param("excludeDeptId") Integer excludeDeptId);
    
    /**
     * 根据父ID查询子部门数量
     *
     * @param parentId 父部门ID
     * @return 子部门数量
     */
    Integer selectChildrenDeptCount(@Param("parentId") Integer parentId);
    
    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 用户数量
     */
    Integer hasUserByDeptId(@Param("deptId") Integer deptId);
    
    /**
     * 查询用户列表（用于部门负责人选择）
     *
     * @return 用户列表，包含id和name
     */
    List<Map<String, Object>> selectUserList();
} 